package web.suzy.oj.dao.problem;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import org.springframework.stereotype.Service;
import web.suzy.oj.pojo.dto.ProblemDTO;
import web.suzy.oj.pojo.entity.problem.Problem;
import web.suzy.oj.pojo.vo.ImportProblemVO;
import web.suzy.oj.pojo.vo.ProblemVO;

import java.util.HashMap;
import java.util.List;

/**
 * YangSuzy 软件工作室
 * 类名: ProblemEntityService
 * 描述: ---- 待定 -----
 * 功能: ---- 待定 -----
 *
 * @author YangSuzy
 * Date: 2022/11/20 14:02
 */
public interface ProblemEntityService extends IService<Problem> {

    /**
     * 方法名: getProblemList
     * 描述: 获取题目列表
     *
     * @param limit       每页显示数量
     * @param currentPage 当前页
     * @param pid         题目ID
     * @param title       题目标题
     * @param difficulty  题目难度
     * @param tid         标签ID
     * @return com.baomidou.mybatisplus.extension.plugins.pagination.Page<web.suzy.oj.pojo.vo.ProblemVO>
     * @date 2022/11/20 16:08
     * @auther YangSuzy
     **/
    Page<ProblemVO> getProblemList(int limit, int currentPage, Long pid, String title,
                                   Integer difficulty, List<Long> tid);

    /**
     * 方法名: adminAddProblem
     * 描述: 管理员添加题目
     *
     * @param problemDto 题目信息数据传输对象
     * @return boolean
     * @date 2022/11/21 16:43
     * @auther YangSuzy
     **/
    boolean adminAddProblem(ProblemDTO problemDto);

    /**
     * 方法名: adminUpdateProblem
     * 描述: 管理员更新题目
     *
     * @param problemDto 题目信息数据传输对象
     * @return boolean
     * @date 2022/11/22 12:24
     * @auther YangSuzy
     **/
    boolean adminUpdateProblem(ProblemDTO problemDto);

    /**
     * 方法名: buildExportProblem
     * 描述: 导出题目数据
     *
     * @param pid             题目ID
     * @param problemCaseList 测试用例列表
     * @param languageMap     编程语言集合
     * @param tagMap          标签集合
     * @return web.suzy.oj.pojo.vo.ImportProblemVO
     * @date 2022/12/3 17:13
     * @auther YangSuzy
     **/
    ImportProblemVO buildExportProblem(
            Long pid,
            List<HashMap<String, Object>> problemCaseList,
            HashMap<Long, String> languageMap,
            HashMap<Long, String> tagMap);

}
